package Abnormal;

/**
 * 抛出异常
    e.printStackTrace()：打印异常信息
    参数检查不合法时，抛出IllegalArgumentException异常
    NullPointerException: 如果一个对象为null，调用其方法或访问其字段就会产生NullPointerException异常

  assert关键字
    断言是一种调试方式，它通常在开发和测试阶段使用，可以在运行时检查某些必要条件是否满足。
    通过 java -ea 开启断言，通过 java -da 关闭断言
*/
public class ThrowError {
  public static void main(String[] args) {
    // Person p = new Person();
    // // 以下代码会产生NullPointerException异常
    // System.out.println(p.address.city.toLowerCase());
    // try {
    //   process1();
    // } catch (Exception e) {
    //   // 异常处理
    //   e.printStackTrace();
    // }
    int x = -1;
    assert x > 0 : "x must be positive";
    System.out.println(x);
    
  }
  
  static void process1() {
    try {
      process2();
    } catch (NullPointerException e) {
      throw new IllegalArgumentException(e);
    }
  }
  
  static void process2() {
    throw new NullPointerException("s is null");
  }
}

class Person {
  String[] name = new String[2];
  Address address = new Address();
}

class Address {
  String city;
  String street;
  String zipcode;
}